package io.github.echarts.option.series;


import io.github.echarts.option.style.ItemStyle;
import io.github.echarts.option.style.LabelStyle;

/**
 * 散点图系列配置。
 * 散点图可以用来展现数据的分布或聚合情况。
 */

public class ScatterSeries extends SeriesOption {
    
    private static final long serialVersionUID = 1L;
    private static final String TYPE = "scatter";
    
    private String symbol;
    private Object symbolSize;  // 可以是Integer或者函数表达式
    private Integer[] symbolOffset;
    private ItemStyle itemStyle;
    private LabelStyle label;  // 标签样式
    
    /**
     * 构造一个新的散点图系列配置实例。
     */
    public ScatterSeries() {
        setType(TYPE);
    }
    
    /**
     * 获取标记点图形类型。
     * 可选值：'circle', 'rect', 'roundRect', 'triangle', 'diamond', 'pin', 'arrow'
     *
     * @return 标记点图形类型
     */
    public String getSymbol() {
        return symbol;
    }
    
    /**
     * 设置标记点图形类型。
     *
     * @param symbol 标记点图形类型
     * @return 当前配置实例，用于链式调用
     */
    public ScatterSeries setSymbol(String symbol) {
        this.symbol = symbol;
        return this;
    }
    
    /**
     * 获取标记点大小。
     * 可以是固定值或基于数据的动态大小。
     *
     * @return 标记点大小
     */
    public Object getSymbolSize() {
        return symbolSize;
    }
    
    /**
     * 设置标记点固定大小。
     *
     * @param symbolSize 标记点大小，单位px
     * @return 当前配置实例，用于链式调用
     */
    public ScatterSeries setSymbolSize(Integer symbolSize) {
        this.symbolSize = symbolSize;
        return this;
    }
    
    /**
     * 设置标记点大小，用于气泡图等大小映射需求。
     * 
     * @param symbolSizeCallback 回调函数或表达式的字符串表示
     * @return 当前配置实例，用于链式调用
     */
    public ScatterSeries setSymbolSize(String symbolSizeCallback) {
        this.symbolSize = symbolSizeCallback;
        return this;
    }
    
    /**
     * 获取标记点偏移量。
     *
     * @return 标记点偏移量，数组形式 [x, y]
     */
    public Integer[] getSymbolOffset() {
        return symbolOffset;
    }
    
    /**
     * 设置标记点偏移量。
     *
     * @param x X轴偏移，单位px
     * @param y Y轴偏移，单位px
     * @return 当前配置实例，用于链式调用
     */
    public ScatterSeries setSymbolOffset(Integer x, Integer y) {
        this.symbolOffset = new Integer[] {x, y};
        return this;
    }
    
    /**
     * 获取散点样式。
     *
     * @return 散点样式
     */
    public ItemStyle getItemStyle() {
        return itemStyle;
    }
    
    /**
     * 设置散点样式。
     *
     * @param itemStyle 散点样式
     * @return 当前配置实例，用于链式调用
     */
    public ScatterSeries setItemStyle(ItemStyle itemStyle) {
        this.itemStyle = itemStyle;
        return this;
    }
    
    /**
     * 获取标签样式。
     *
     * @return 标签样式
     */
    public LabelStyle getLabel() {
        return label;
    }
    
    /**
     * 设置标签样式。
     *
     * @param label 标签样式
     * @return 当前配置实例，用于链式调用
     */
    public ScatterSeries setLabel(LabelStyle label) {
        this.label = label;
        return this;
    }
    
    @Override
    public Object getData() {
        return super.getData();
    }
    
    @Override
    public ScatterSeries setData(Object data) {
        super.setData(data);
        return this;
    }
    
    /**
     * 覆盖父类的方法，确保返回具体的ScatterSeries类型。
     *
     * @param name 系列名称
     * @return 当前配置实例，用于链式调用
     */
    @Override
    public ScatterSeries setName(String name) {
        super.setName(name);
        return this;
    }
    
    // setZIndex方法已删除，因为父类SeriesOption不再提供此方法
} 